package com.jiashihui.schema_lgorithm.schema.singleton;

import java.io.ObjectStreamException;
import java.util.HashMap;
import java.util.Map;

/**
 * @author jiashihui
 * @describe: 用SingletonManager 将多种的单例类统一管理，在使用时根据key获取对象对应类型的对象。
 * 这种方式使得我们可以管理多种类型的单例，并且在使用时可以通过统一的接口进行获取操作，降低了用户的使用成本，也对用户隐藏了具体实现，降低了耦合度。
 * @date 2019/03/04
 */
public class SingletonManager {
    private static Map<String, Object> objMap = new HashMap<String, Object>();

    private SingletonManager() {
    }

    public static void registerService(String key, Object instance) {
        if (!objMap.containsKey(key)) {
            objMap.put(key, instance);
        }
    }

    public static Object getInstance(String key) {
        return objMap.get(key);
    }

    /**
     * 反序列化操作提供了readResolve方法，这个方法可以让开发人员控制对象的反序列化。
     * @return
     * @throws ObjectStreamException
     */
    private Object readResolve() throws ObjectStreamException {
        return objMap;
    }
}
